home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
oper_sys
/
quartz
/
quartz10.lha
/
README
< prev
Wrap
Text File
|
1990-05-18
|
2KB
|
57 lines
This directory contains source code and makefiles for
Quartz, an enhanced version of Presto 0.4, and FastThreads.
Quartz works with programs written for either Presto or FastThreads.
The sub-directories are:
doc -- documentation for these systems
FTexample -- example FastThreads programs, linked with Quartz
Pexample -- an example Presto program, linked with Quartz
src -- source for the 3 systems
bin -- utility programs
lib -- linkable libraries
** IMPORTANT: KNOWN BUGS AND RECOMMENDATIONS ***
Both FastThreads and Presto have debugging versions: compiled with -g,
and with assertions to help detect erroroneous use of the libraries
(e.g., using a lock before initializing it). FastThreads also has
a lint library (in the lib sub-directory).
From our experience with people using FastThreads and Presto, you
will be liable to think that these libraries are broken when it may
be a bug in your program. For example, if you have an
intermittent error, it need not necessarily be a concurrency problem.
Especially in C, memory allocation problems (eg, overwriting the end
of an allocated chunk) may appear intermittent when the program is
run on more than one processor (or even between recompilations of
the same program). These types of errors are likely to show up
as crashes within the thread libraries (or in Quartz), since they
make extensive use of the heap.
Thus, we highly recommend that you debug your programs first
on one processor, using the debugging versions of FastThreads or
Presto, then debug your program on more than one processor,
and only given a correct program, attempt to tune using Quartz.
That said, Quartz is somewhat flaky when used with C optimization
turned on (-O -i). Many programs will work this way, but we suggest
that you first profile with -g turned on and the debugging version
of Quartz (thread_dp.a or qlib_d.a).
One further point: Quartz will record information for any Presto
or FastThreads thread that is created with a non-null name.
It will aggregate threads with the same name, but it does so
inefficiently (creating large intermediate files). Thus, you should
be careful and only give names to threads when there are only a
relatively few of them or you need to specially separate out their
performance. Alas, Quartz also records information for each separate
synchronization object (lock, barrier, etc.) whether or not you give
it a name. We are currently working on a general fix for this problem.